#pragma once

#include <gexpl_spi.h>

// 等待（STAT寄存器的）某个标志位置位。参数中为1的标志位中，任意位为1，便结束。
void spi_wait_stat(spi_qe spi_q, spi_stat_expl_s exp_stat);

// （作为主机）交换数据。参数指示发送的数据，返回收到的数据。
static inline u32_s spi_master_swap(spi_qe spi_q, u32_s data) {
	// 等待“可发送”标志位
	spi_stat_expl_s stat_trans_avl = {
		.trans_avl = 1,
	};
	spi_wait_stat(spi_q, stat_trans_avl);

	// 发送
	spi_wn_data(spi_q, data);

	// 等待“有数据”标志位
	spi_stat_expl_s stat_has_unread = {
		.has_unread = 1,
	};
	spi_wait_stat(spi_q, stat_has_unread);

	// 接收并返回
	return spi_rn_data(spi_q);
}
